var f_tree_pages = null;
var f_editor_pages = null;

$(function(){

	/* building buttons and attach click events */
	$( "#foriaPagesSaveBtn" ).button({
		icons: {
			primary: "ui-icon-disk"
		},
		text: true
    })
	$('#foriaPagesSaveBtn').click(function (e){
		foriaJSPages.save_page();
	})

	$( "#foriaPagesUpdateBtn" ).button({
		icons: {
			primary: "ui-icon-disk"
		},
		text: true
    })

	$('#foriaPagesUpdateBtn').click(function (e){
		foriaJSPages.update_tree();
	})

	$( "#foriaPagesNewBtn" ).button({
		icons: {
			primary: "ui-icon-document"
		},
		text: true
    })

	$('#foriaPagesNewBtn').click(function (e){
		var is_changed = foriaJSPages.is_changed;
		$('#foriaPagesNewDialog').dialog({
			//autoOpen: false,
			modal: true,
			resizable: false,
			dialogClass: 'alert',
			position: [ e.pageX, e.pageY ],
			buttons: {
				"Создать": function() {
					foriaJSPages.is_changed = is_changed;
					foriaJSPages.create_page();
					$( this ).dialog( "close" );
				},
				"Нет спасибо в другой раз": function() {
					$( this ).dialog( "close" );
				}
			}
		});
	});

	$( "#foriaPagesDelBtn" ).button({
		icons: {
			primary: "ui-icon-trash"
		},
		text: true
    })

	$('#foriaPagesDelBtn').click(function (e){

/*
// пока это не будем использовать
		var node = f_tree_pages._get_node();
		if (node == false) {
			foriaShowModalError('Нет выделенной страницы.');
			return false;
		}
*/
		$('#foriaPagesDelDialog').dialog({
			//autoOpen: false,
			modal: true,
			resizable: false,
			dialogClass: 'alert',
			position: [ e.pageX, e.pageY ],
			width:350,
			buttons: {
				"Да, я хочу удалить": function() {
					foriaJSPages.delete_page();
					$( this ).dialog( "close" );
				},
				"Нет спасибо в другой раз": function() {
					$( this ).dialog( "close" );
				}
			}
		});
	});

	$( "#foriaPagesSmartyBtn" ).button({
		icons: {
			primary: "ui-icon-gear"
		},
		text: true
    }).click(function (e){
		foriaJSPages.fetch_smarty();
		$('#foriaPagesSmartyDialog').dialog({
			//autoOpen: false,
			modal: true,
			resizable: false,
			dialogClass: 'alert',
			position: [ e.pageX, e.pageY ],
			width:300,
			buttons: {
				"Сохранить": function() {
					foriaJSPages.save_smarty();
					$( this ).dialog( "close" );
				},
				"Закрыть": function() {
					$( this ).dialog( "close" );
				}
			}
		});
	});

	$( "#foriaPagesMetaBtn" ).button({
		icons: {
			primary: "ui-icon-document"
		},
		text: true
    }).click(function (e){
		foriaJSPages.fetch_meta();
		$('#foriaPagesMetaDialog').dialog({
			//autoOpen: false,
			modal: true,
			resizable: false,
			dialogClass: 'alert',
			position: [ e.pageX, e.pageY ],
			width:600,
			buttons: {
				"Сохранить": function() {
					foriaJSPages.save_meta();
					$( this ).dialog( "close" );
				},
				"Закрыть": function() {
					$( this ).dialog( "close" );
				}
			}
		});
	});


	/* end building buttons and attach click events */

	f_editor_pages = CodeMirror.fromTextArea(document.getElementById("foriaContentPagesTextArea"), {
		lineNumbers: true,
		matchBrackets: true,
		//mode: "application/x-httpd-php",
		mode : "smarty",
		indentUnit: 4,
		indentWithTabs: true,
		//smartIndent: false,
		//tabMode: "shift",
		extraKeys: {
			"Ctrl-Space": function(cm) {CodeMirror.simpleHint(cm, CodeMirror.javascriptHint);}
			//"Enter": "newLineAndIndent"
		},
		onChange: function (n) {
			foriaJSPages.is_changed=true;
		}
	});

	/* setup styles for code mirror */
	$('.CodeMirror').addClass('ui-widget ui-widget-content ui-corner-all');
	$('.CodeMirror').css('font-size', '13px');
	//$('.CodeMirror').css('margin-top', '0px');

	/* make size for admin area */
	foriaAutoPageResize();

	/* onchange events */
	$('#foriaTabPages').find(':input').bind('keyup change paste', function(e){
		foriaJSPages.is_changed=true;
	});

	// если страница в меню - значит она должна быть активна
	$('#foriaContentPagesInputInMenu').change(function(){
		if ($('#foriaContentPagesInputInMenu').attr('checked')) {
			$('#foriaContentPagesInputActive').attr('checked', $('#foriaContentPagesInputInMenu').attr('checked')?true:false);
		}
	});

	// если страница не активна - значит она должна быть в меню
	$('#foriaContentPagesInputActive').change(function(){
		if (!$('#foriaContentPagesInputActive').attr('checked')) {
			$('#foriaContentPagesInputInMenu').attr('checked', $('#foriaContentPagesInputActive').attr('checked')?true:false);
		}
	});

	//$('#foriaTabPages').find(':input').attr('disabled', '');

});

function foriaAutoPageResize()
{
	var baseOffsetHeight = 107;
	var baseOffsetWidth  = 254;
	var needHeight = $(window).height() - baseOffsetHeight;
	var needWidth = $(window).width() - baseOffsetWidth;
	$('.CodeMirror-scroll').css('height', needHeight-25);
	$('.CodeMirror-scroll').css('width', needWidth);
	$('#foriaAdminPagesTreeContent').height(needHeight);
//	$('#foriaContentPagesTextArea').height(needHeight);
//	$('#foriaContentPagesTextArea').width(needWidth);
}

$(window).resize(function() {
	if (foriaSelectedTab == 'foriaTabPages')
		foriaAutoPageResize();
});


/* end of the initialization */

/* PAGES BLOCK JS CODE WILL BE MOVED TO ANOTHER JS FILE AFTER FINISHING */

var foriaJSPages = {
	tree:null,
	id:0,
	content:null,
	name: '',
	is_changed: false
}

var doNotReload = false;

foriaJSPages.update_tree = function()
{
	//$__PAGES_LAST_ACCESS__ = 1325107298.392;
	$.ajax({
		async : true,
		type: 'GET',
		dataType: 'json',
		url: __BASE_PAGE_ROUTE__+"/fetch_tree_changes/",
		data: {
			"pages_last_access" : __PAGES_LAST_ACCESS__
		},
		success: function (r) {
			if(r.pages_last_access > 0) {
				__PAGES_LAST_ACCESS__ = r.pages_last_access;
				for (var id in r.data) {
					if (r.data[id].action=='new'){
						var pnode = f_tree_pages._get_node('#'+__PREFIFIX_PAGE_NODE_ID__+"_"+r.data[id].pid);
						var node  = f_tree_pages._get_node('#'+__PREFIFIX_PAGE_NODE_ID__+"_"+r.data[id].id);
						if (node==false&&pnode!=false&&f_tree_pages._is_loaded(pnode)==true) {
							f_tree_pages.create_node (
								pnode,
								r.data[id].position-1,
								{ attr: { id: __PREFIFIX_PAGE_NODE_ID__+"_"+r.data[id].id }, data: r.data[id].name },
								function (){},
								true
							);
						} else {
							if (node==false&&pnode==false) {
								f_tree_pages.create_node (
									-1,
									r.data[id].position-1,
									{ attr: { id: __PREFIFIX_PAGE_NODE_ID__+"_"+r.data[id].id }, data: r.data[id].name },
									function (){},
									true
								);
							}
						}
					}
					if (r.data[id].action=='del'){
						var node  = f_tree_pages._get_node('#'+__PREFIFIX_PAGE_NODE_ID__+"_"+r.data[id].id);
						if (node != false)
							f_tree_pages.delete_node(node);
					}
					if (r.data[id].action=='move'){
						var node  = f_tree_pages._get_node('#'+__PREFIFIX_PAGE_NODE_ID__+"_"+r.data[id].id);
						var rnode = f_tree_pages._get_node('#'+__PREFIFIX_PAGE_NODE_ID__+"_"+r.data[id].ref);
						if (node!=false&&f_tree_pages._is_loaded (rnode)==true) {
							if (rnode == false)
								rnode = -1;
							doNotReload = true;
							f_tree_pages.move_node(node, rnode, r.data[id].position - 1, false, false, false);
							doNotReload = false;
						} else {
							if (node!=false){
								f_tree_pages.delete_node(node);
							} else {
								if (rnode!=false) {
									f_tree_pages.create_node (
										rnode,
										r.data[id].position-1,
										{
											attr: { id: __PREFIFIX_PAGE_NODE_ID__+"_"+r.data[id].id },
											data: r.data[id].name,
											state: r.data[id].state
										},
										function (){},
										true
									);
									//f_tree_pages.refresh(node);
								}
							}
						}
					}
					if (r.data[id].action=='save'){
						var node  = f_tree_pages._get_node('#'+__PREFIFIX_PAGE_NODE_ID__+"_"+r.data[id].id);
						if (node != false)
							f_tree_pages.set_text(node, r.data[id].name);
					}
				}
				__PAGES_LAST_ACCESS__ = r.pages_last_access;
			}
		}
	});

}

foriaJSPages.fetch_meta = function ()
{
	var is_changed = this.is_changed;
	this.is_changed_modal = is_changed;
	foriaStatusBarMessage ('Читаю мета данные ... ');
	$.ajax({

		url: __BASE_PAGE_ROUTE__+"/load_meta/",
		dataType: 'json',
		cache: false,
		async: false,
		type: 'POST',
		data: {
			'id': foriaJSPages.id
		},
		success: function(data) {
			if (data.error=='')
			{
				$('#foriaContentPagesInputTitle').val(data['title']);
				$('#foriaContentPagesInputDescription').val(data['description']);
				$('#foriaContentPagesInputKeywords').val(data['keywords']);
				foriaStatusBarMessage ('Данные прочитаны ... ');
			}
			else
			{
				$('#foriaContentPagesInputTitle').val('');
				$('#foriaContentPagesInputDescription').val('');
				$('#foriaContentPagesInputKeywords').val('');
				foriaStatusBarMessage ('Ошибка чтения мета данных: '+data.error);
			}
		}

	});
	this.is_changed = is_changed;
	return false;
}

foriaJSPages.fetch_smarty = function ()
{
	var is_changed = this.is_changed;
	this.is_changed_modal = is_changed;
	foriaStatusBarMessage ('Читаю мета данные ... ');
	$.ajax({

		url: __BASE_PAGE_ROUTE__+"/load_smarty/",
		dataType: 'json',
		cache: false,
		async: false,
		type: 'POST',
		data: {
			'id': foriaJSPages.id
		},
		success: function(data) {
			if (data.error=='')
			{
				$('#foriaContentPagesInputEnableCache').attr('checked', data['cached']=='true'?true:false);
				$('#foriaContentPagesInputCacheTime').val(data['cache_time']);
				$('#foriaContentPagesInputEnableDebug').attr('checked', data['enable_debug']=='true'?true:false);
				foriaStatusBarMessage ('Данные прочитаны ... ');
			}
			else
			{
				$('#foriaContentPagesInputEnableCache').attr('checked', false);
				$('#foriaContentPagesInputCacheTime').val('');
				$('#foriaContentPagesInputEnableDebug').attr('checked', false);
				foriaStatusBarMessage ('Ошибка чтения мета данных: '+data.error);
			}
		}

	});
	this.is_changed = is_changed;
	return false;
}

foriaJSPages.save_smarty = function()
{

	foriaStatusBarMessage ('Сохранение выделенной страницы ... ');
	$.ajax({
		url: __BASE_PAGE_ROUTE__+"/save_smarty",
		type: 'POST',
		data:
			{
				'id': foriaJSPages.id,
				'cached': $('#foriaContentPagesInputEnableCache').attr('checked')?true:false,
				'cache_time' : $('#foriaContentPagesInputCacheTime').val(),
				'enable_debug' : $('#foriaContentPagesInputEnableDebug').attr('checked')?true:false
			},
		dataType: 'json',

		success: function(data) {
			if (data.error == ''){
				foriaStatusBarMessage ('Мета данные сохранены ... ');
			}else{
				foriaStatusBarMessage ('Не могу сохранить метаданные. Ошибка: '+data.error);
			}
		}
	});
	this.is_changed = this.is_changed_modal;
}

foriaJSPages.save_meta = function()
{

	var is_changed = this.is_changed;
	foriaStatusBarMessage ('Сохранение выделенной страницы ... ');
	$.ajax({
		url: __BASE_PAGE_ROUTE__+"/save_meta",
		type: 'POST',
		data:
			{
				'id': foriaJSPages.id,
				'title': $('#foriaContentPagesInputTitle').val(),
				'description' : $('#foriaContentPagesInputDescription').val(),
				'keywords' : $('#foriaContentPagesInputKeywords').val()
			},
		dataType: 'json',

		success: function(data) {
			if (data.error == ''){
				foriaStatusBarMessage ('Мета данные сохранены ... ');
			}else{
				foriaStatusBarMessage ('Не могу сохранить метаданные. Ошибка: '+data.error);
			}
		}

	});
	this.is_changed = this.is_changed_modal;
}

foriaJSPages.do_not_saved = function ()
{

	//return  confirm('asasa');


}


foriaJSPages.load_page = function(id)
{

	if (foriaJSPages.id > 0 && foriaJSPages.is_changed == true) {
		var node = f_tree_pages._get_node();
		sid = $(node).attr('id').replace(__PREFIFIX_PAGE_NODE_ID__+"_","");
		if (sid == this.id) return;
		f_tree_pages.deselect_node(node);
		node = f_tree_pages._get_node('#'+__PREFIFIX_PAGE_NODE_ID__+"_"+this.id);
		f_tree_pages.select_node(node);

		foriaShowNotSaved(function(){
			foriaJSPages.is_changed = false;
			var node = f_tree_pages._get_node('#'+__PREFIFIX_PAGE_NODE_ID__+"_"+foriaJSPages.id);
			f_tree_pages.deselect_node(node);
			node = f_tree_pages._get_node('#'+__PREFIFIX_PAGE_NODE_ID__+"_"+id);
			f_tree_pages.select_node(node);
		});

		return;
	}

	foriaStatusBarMessage ('Читаю данные ... ');

	$.ajax({

		url: __BASE_PAGE_ROUTE__+"/load/",
		dataType: 'json',
		type: "POST",
		data: {
			"id" : id
		},

		success: function(data) {
			if (data.error=='')
			{
				foriaJSPages.name = data['name'];
				$('#foriaPageName').text(foriaJSPages.name);
				$('#foriaContentPagesInputName').val(data['name']);
				//$('#foriaContentPagesTextArea').val(data['content']);
				f_editor_pages.setValue(data['content']);
				$('#foriaContentPagesInputMName').val(data['mname']);
				$('#foriaContentPagesInputInMenu').attr('checked', data['in_menu']=='true'?true:false);
				$('#foriaContentPagesInputActive').attr('checked', data['active']=='true'?true:false);
				$('#foriaContentPagesInputParams').val(data['max_num_params']);
				var node = f_tree_pages._get_node();
				f_tree_pages.set_text(node, data['name']);
				var templates = $("#foriaContentPagesInputTemplate");
				templates.empty();
				templates.append( $('<option value="">Без шаблона</option>') );
				var t_selected = "";
				for (var i in data.templates) {
					var t_selected = data.template == data.templates[i]?' selected':'';
					templates.append( $('<option value="'+data.templates[i]+'"'+t_selected+'>'+data.templates[i]+'</option>') );
				}
				foriaJSPages.id = data['id'];
				foriaJSPages.is_changed = false;
				foriaStatusBarMessage ('Данные прочитаны ... ');
			}
			else
			{
				foriaStatusBarMessage ('Ошибка чтения данных: '+data.error);
			}
		}

	});

	return false;

}


foriaJSPages.create_page = function()
{

	foriaStatusBarMessage ('Создание новой страницы ... ');

	var node = f_tree_pages._get_node('#'+__PREFIFIX_PAGE_NODE_ID__+"_"+this.id);

	var new_name = $('#foriaPagesNewName').val();
	var	subpage  = $('#foriaPagesAsRoot').attr('checked')?true:false;

	$.ajax({
		async : false,
		type: 'POST',
		dataType: 'json',
		url: __BASE_PAGE_ROUTE__+"/create",
		data: {
			"id" : this.id,
			"position" : 0,
			"name" : new_name,
			"subpage" : subpage
		},
		success: function (r) {
			if(r.status == 1) {
				if (node != false && f_tree_pages._is_loaded(node)==false && subpage == true){
					f_tree_pages.load_node ( node , function(){
						f_tree_pages._get_node('#'+__PREFIFIX_PAGE_NODE_ID__+"_"+r.id).children("a").click();
					} , function(){} )
				} else {
					if (subpage==false||node==false)
						node=-1;
					f_tree_pages.create_node (
						node,
						r.position-1,
						{ attr: { id: __PREFIFIX_PAGE_NODE_ID__+"_"+r.id }, data: new_name },
						function (){
							foriaStatusBarMessage ('Новая страница создана ... ');
							if (subpage == true && node != -1 && f_tree_pages.is_open(node) == false){
								f_tree_pages.toggle_node(node);
							}
							f_tree_pages._get_node('#'+__PREFIFIX_PAGE_NODE_ID__+"_"+r.id).children("a").click();
						},
						true
					);
				}

			}
			else {
				var mesg = 'Не могу создать страницу. Ошибка: '+r.error;
				foriaShowModalError(mesg);
				foriaStatusBarMessage(mesg);
			}
		}

	});
}

foriaJSPages.delete_page = function()
{

	var node = f_tree_pages._get_node();
	if (node == false) {
		foriaShowModalError('Нет выделеной страницы');
		return false;
	}

	foriaStatusBarMessage ('Удаление выделенной страницы ... ');
	$.ajax({
		async : false,
		type: 'POST',
		dataType: 'json',
		url: __BASE_PAGE_ROUTE__+"/delete",
		data : {
			"id" : foriaJSPages.id
		},
		success : function (r) {
			if(r.status == 1) {
				foriaJSPages.id = 0;
				$('#foriaContentPagesInputName').val('');
				f_editor_pages.setValue('');
				$('#foriaContentPagesInputMName').val('');
				$('#foriaContentPagesInputInMenu').attr('checked', false);
				$('#foriaContentPagesInputActive').attr('checked', false);
				f_tree_pages.delete_node(node);
			} else {
				var mesg = 'Ошибка удаления страницы ... ';
				foriaShowModalError(mesg);
				foriaStatusBarMessage (mesg);
			}
		}
	});

}

foriaJSPages.save_page = function()
{

	foriaStatusBarMessage ('Сохранение выделенной страницы ... ');
	$.ajax({
		url: __BASE_PAGE_ROUTE__+"/save",
		type: 'POST',
		data:
			{
				'id': foriaJSPages.id,
				'content': f_editor_pages.getValue(),
				'name' : $('#foriaContentPagesInputName').val(),
				'mname' : $('#foriaContentPagesInputMName').val(),
				'in_menu' : $('#foriaContentPagesInputInMenu').attr('checked')?true:false,
				'active' : $('#foriaContentPagesInputActive').attr('checked')?true:false,
				'template' : $("#foriaContentPagesInputTemplate").val(),
				'max_num_params' : $('#foriaContentPagesInputParams').val()
			},
		dataType: 'json',

		success: function(data) {
			if (data.error == ''){
				var node = f_tree_pages._get_node();
				f_tree_pages.set_text(node, $('#foriaContentPagesInputName').val());
				foriaStatusBarMessage ('Страница сохранена ... ');
				if (data.compile[0]>0) {
					foriaShowModalError ('Данные сохранены, но найдена синтаксическая ошибка:<br><br><b>'+data.compile[1]+'</b>',
						function(){
							f_editor_pages.setCursor(
								{'line':data.compile[0]-1, 'ch':0}
							);
							f_editor_pages.focus()
						});
				}
				foriaJSPages.is_changed = false;
			}else{
				foriaStatusBarMessage ('Не могу сохранить страницу. Ошибка: '+data.error);
			}
		}

	});

}

/* END PAGES JS CODE BLOCK */

/* START CODES FOR TREE */

function customMenu(node) {
	var items = {
        createItem: {
            label: "Создать",
            action: function () {
            	$('#foriaPagesNewBtn').click();
            }
        },
/*
        renameItem: { // The "rename" menu item
            label: "Переименовать",
            action: function () {
				$('#foriaPagesRenameDialog').dialog({
					//autoOpen: false,
					modal: true,
					resizable: false,
					dialogClass: 'alert',
					//position: [ e.pageX, e.pageY ],
					buttons: {
						"Переименовать": function() {
							foriaJSPages.rename_page();
							$( this ).dialog( "close" );
						},
						"Нет спасибо в другой раз": function() {
							$( this ).dialog( "close" );
						}
					}
				});
            }
        },
*/
        deleteItem: { // The "delete" menu item
            label: "Удалить",
            action: function () { $('#foriaPagesDelBtn').click(); }
        }
    };
	return items;
}

$(function () {

$("#foriaAdminPagesTreeContent")
	.jstree({
		// List of active plugins
		"plugins" : [
			"themes","json_data","ui","crrm","cookies","dnd","types","hotkeys","contextmenu"
		],
		contextmenu: {items: customMenu},
		// I usually configure the plugin that handles the data first
		// This example uses JSON as it is most common
		"json_data" : {
			// This tree is ajax enabled - as this is most common, and maybe a bit more complex
			// All the options are almost the same as jQuery's AJAX (read the docs)
			"ajax" : {
				// the URL to fetch the data
				type: 'POST',
				"url" : __BASE_PAGE_ROUTE__+"/load_tree",
				// the `data` function is executed in the instance's scope
				// the parameter is the node being loaded
				// (may be -1, 0, or undefined when loading the root nodes)
				"data" : function (n) {
					// the result is fed to the AJAX request `data` option
					return {
						// "operation" : "get_children",
						"id" : n.attr ? n.attr("id").replace(__PREFIFIX_PAGE_NODE_ID__+"_","") : 0
					};
				}
			}
		},
		"types" : {
			"types" : {
				// The default type
				"default" : {
					"icon" : {
						//"image" : __BASE_PAGE__+"js/sysimg/file.png?"+Math.random(),
					}
				}
			}
		},
	})

	.bind("move_node.jstree", function (e, data) {

		if (doNotReload == false) {
		data.rslt.o.each(function (i) {
			$.ajax({
				async : false,
				type: 'GET',
				dataType: 'json',
				"url" : __BASE_PAGE_ROUTE__+"/move_tree",
				data : {
					"operation" : "move_node",
					"id" : $(this).attr("id").replace(__PREFIFIX_PAGE_NODE_ID__+"_",""),
					"ref" : data.rslt.cr === -1 ? 0 : data.rslt.np.attr("id").replace(__PREFIFIX_PAGE_NODE_ID__+"_",""),
					"position" : data.rslt.cp + i + 1,
					"title" : data.rslt.name,
					"copy" : data.rslt.cy ? 1 : 0
				},
				success : function (r) {
					if(r.status==1) {
						$(data.rslt.oc).attr("id", __PREFIFIX_PAGE_NODE_ID__+"_" + r.id);
						if(data.rslt.cy && $(data.rslt.oc).children("UL").length) {
							data.inst.refresh(data.inst._get_parent(data.rslt.oc));
						}
					}
					else {
						$.jstree.rollback(data.rlbk);
					}
				}

			});
		});
		}

	})
	.bind("select_node.jstree", function (e, data) {
			foriaJSPages.load_page (data.rslt.obj.attr("id").replace(__PREFIFIX_PAGE_NODE_ID__+"_",""));
	});

	f_tree_pages = jQuery.jstree._reference("#foriaAdminPagesTreeContent");

	/* в будущем немного по другому организую
     * для пробной версии этого будет досточно
     */
	setInterval ( function(){
	if (foriaSelectedTab == 'foriaTabPages')
		foriaJSPages.update_tree();
	}, 5000);

});



/* STOP CODES FOR TREE */